Breadth-first Search
   HOME

TheInfoList



OR:

Breadth-first search (BFS) is an
algorithm In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific Computational problem, problems or to perform a computation. Algorithms are used as specificat ...
for searching a
tree In botany, a tree is a perennial plant with an elongated stem, or trunk, usually supporting branches and leaves. In some usages, the definition of a tree may be narrower, including only woody plants with secondary growth, plants that are ...
data structure for a node that satisfies a given property. It starts at the
tree root In vascular plants, the roots are the organs of a plant that are modified to provide anchorage for the plant and take in water and nutrients into the plant body, which allows plants to grow taller and faster. They are most often below the sur ...
and explores all nodes at the present depth prior to moving on to the nodes at the next depth level. Extra memory, usually a
queue __NOTOC__ Queue () may refer to: * Queue area, or queue, a line or area where people wait for goods or services Arts, entertainment, and media *''ACM Queue'', a computer magazine * ''The Queue'' (Sorokin novel), a 1983 novel by Russian author ...
, is needed to keep track of the child nodes that were encountered but not yet explored. For example, in a
chess endgame In chess and other similar games, the endgame (or end game or ending) is the stage of the game when few pieces are left on the board. The line between middlegame and endgame is often not clear, and may occur gradually or with the quick exchange ...
a
chess engine In computer chess, a chess engine is a computer program that analyzes chess or chess variant positions, and generates a move or list of moves that it regards as strongest. A chess engine is usually a back end with a command-line interface wit ...
may build the
game tree In the context of Combinatorial game theory, which typically studies sequential games with perfect information, a game tree is a graph representing all possible game states within such a game. Such games include well-known ones such as chess, ch ...
from the current position by applying all possible moves, and use breadth-first search to find a win position for white. Implicit trees (such as game trees or other problem-solving trees) may be of infinite size; breadth-first search is guaranteed to find a solution node if one exists. In contrast, (plain) depth-first search, which explores the node branch as far as possible before backtracking and expanding other nodes, may get lost in an infinite branch and never make it to the solution node.
Iterative deepening depth-first search In computer science, iterative deepening search or more specifically iterative deepening depth-first search (IDS or IDDFS) is a state space/graph search strategy in which a depth-limited version of depth-first search is run repeatedly with incr ...
avoids the latter drawback at the price of exploring the tree's top parts over and over again. On the other hand, both depth-first algorithms get along without extra memory. Breadth-first search can be generalized to
graph Graph may refer to: Mathematics *Graph (discrete mathematics), a structure made of vertices and edges **Graph theory, the study of such graphs and their properties *Graph (topology), a topological space resembling a graph in the sense of discre ...
s, when the start node (sometimes referred to as a 'search key') is explicitly given, and precautions are taken against following a vertex twice. BFS and its application in finding connected components of graphs were invented in 1945 by
Konrad Zuse Konrad Ernst Otto Zuse (; 22 June 1910 – 18 December 1995) was a German civil engineer, pioneering computer scientist, inventor and businessman. His greatest achievement was the world's first programmable computer; the functional program ...
, in his (rejected) Ph.D. thesis on the
Plankalkül Plankalkül () is a programming language designed for engineering purposes by Konrad Zuse between 1942 and 1945. It was the first high-level programming language to be designed for a computer. ''Kalkül'' is the German term for a formal systemâ ...
programming language, but this was not published until 1972.. See pp. 96–105 of the linked pdf file (internal numbering 2.47–2.56). It was reinvented in 1959 by Edward F. Moore, who used it to find the shortest path out of a maze, and later developed by C. Y. Lee into a
wire routing In electronic design, wire routing, commonly called simply routing, is a step in the design of printed circuit boards (PCBs) and integrated circuits (ICs). It builds on a preceding step, called placement, which determines the location of each ...
algorithm (published 1961).


Pseudocode

Input: A graph and a ''starting vertex'' of Output: Goal state. The ''parent'' links trace the shortest path back to 1 procedure BFS(''G'', ''root'') is 2 let ''Q'' be a queue 3 label ''root'' as explored 4 ''Q''.enqueue(''root'') 5 while ''Q'' is not empty do 6 ''v'' := ''Q''.dequeue() 7 if ''v'' is the goal then 8 return ''v'' 9 for all edges from ''v'' to ''w'' in ''G''.adjacentEdges(''v'') do 10 if ''w'' is not labeled as explored then 11 label ''w'' as explored 12 ''w''.parent := ''v'' 13 ''Q''.enqueue(''w'')


More details

This non-recursive implementation is similar to the non-recursive implementation of depth-first search, but differs from it in two ways: # it uses a
queue __NOTOC__ Queue () may refer to: * Queue area, or queue, a line or area where people wait for goods or services Arts, entertainment, and media *''ACM Queue'', a computer magazine * ''The Queue'' (Sorokin novel), a 1983 novel by Russian author ...
(First In First Out) instead of a stack and # it checks whether a vertex has been explored before enqueueing the vertex rather than delaying this check until the vertex is dequeued from the queue. If is a
tree In botany, a tree is a perennial plant with an elongated stem, or trunk, usually supporting branches and leaves. In some usages, the definition of a tree may be narrower, including only woody plants with secondary growth, plants that are ...
, replacing the queue of this breadth-first search algorithm with a stack will yield a depth-first search algorithm. For general graphs, replacing the stack of the iterative depth-first search implementation with a queue would also produce a breadth-first search algorithm, although a somewhat nonstandard one. The ''Q'' queue contains the frontier along which the algorithm is currently searching. Nodes can be labelled as explored by storing them in a set, or by an attribute on each node, depending on the implementation. Note that the word ''node'' is usually interchangeable with the word ''vertex''. The ''parent'' attribute of each node is useful for accessing the nodes in a shortest path, for example by backtracking from the destination node up to the starting node, once the BFS has been run, and the predecessors nodes have been set. Breadth-first search produces a so-called ''breadth first tree''. You can see how a ''breadth first tree'' looks in the following example.


Example

The following is an example of the breadth-first tree obtained by running a BFS on
German German(s) may refer to: * Germany (of or related to) ** Germania (historical use) * Germans, citizens of Germany, people of German ancestry, or native speakers of the German language ** For citizens of Germany, see also German nationality law **Ge ...
cities starting from ''Frankfurt'':


Analysis


Time and space complexity

The
time complexity In computer science, the time complexity is the computational complexity that describes the amount of computer time it takes to run an algorithm. Time complexity is commonly estimated by counting the number of elementary operations performed by t ...
can be expressed as O(, V, +, E, ), since every vertex and every edge will be explored in the worst case. , V, is the number of vertices and , E, is the number of edges in the graph. Note that O(, E, ) may vary between O(1) and O(, V, ^2), depending on how sparse the input graph is. When the number of vertices in the graph is known ahead of time, and additional data structures are used to determine which vertices have already been added to the queue, the
space complexity The space complexity of an algorithm or a computer program is the amount of memory space required to solve an instance of the computational problem as a function of characteristics of the input. It is the memory required by an algorithm until it ex ...
can be expressed as O(, V, ), where , V, is the number of vertices. This is in addition to the space required for the graph itself, which may vary depending on the graph representation used by an implementation of the algorithm. When working with graphs that are too large to store explicitly (or infinite), it is more practical to describe the complexity of breadth-first search in different terms: to find the nodes that are at distance from the start node (measured in number of edge traversals), BFS takes time and memory, where is the "
branching factor In computing, tree data structures, and game theory, the branching factor is the number of children at each node, the outdegree. If this value is not uniform, an ''average branching factor'' can be calculated. For example, in chess, if a "no ...
" of the graph (the average out-degree).


Completeness

In the analysis of algorithms, the input to breadth-first search is assumed to be a finite graph, represented as an
adjacency list In graph theory and computer science, an adjacency list is a collection of unordered lists used to represent a finite graph. Each unordered list within an adjacency list describes the set of neighbors of a particular vertex in the graph. This is ...
,
adjacency matrix In graph theory and computer science, an adjacency matrix is a square matrix used to represent a finite graph. The elements of the matrix indicate whether pairs of vertices are adjacent or not in the graph. In the special case of a finite simp ...
, or similar representation. However, in the application of graph traversal methods in
artificial intelligence Artificial intelligence (AI) is intelligence—perceiving, synthesizing, and inferring information—demonstrated by machines, as opposed to intelligence displayed by animals and humans. Example tasks in which this is done include speech r ...
the input may be an implicit representation of an infinite graph. In this context, a search method is described as being complete if it is guaranteed to find a goal state if one exists. Breadth-first search is complete, but depth-first search is not. When applied to infinite graphs represented implicitly, breadth-first search will eventually find the goal state, but depth first search may get lost in parts of the graph that have no goal state and never return.Coppin, B. (2004). Artificial intelligence illuminated. Jones & Bartlett Learning. pp. 79–80.


BFS ordering

An enumeration of the vertices of a graph is said to be a BFS ordering if it is the possible output of the application of BFS to this graph. Let G=(V,E) be a graph with n vertices. Recall that N(v) is the set of neighbors of v. Let \sigma=(v_1,\dots,v_m) be a list of distinct elements of V, for v\in V\setminus\, let \nu_(v) be the least i such that v_i is a neighbor of v, if such a i exists, and be \infty otherwise. Let \sigma=(v_1,\dots,v_n) be an enumeration of the vertices of V. The enumeration \sigma is said to be a BFS ordering (with source v_1) if, for all 1, v_i is the vertex w\in V\setminus\ such that \nu_(w) is minimal. Equivalently, \sigma is a BFS ordering if, for all 1\le i with v_i\in N(v_k)\setminus N(v_j), there exists a neighbor v_m of v_j such that m.


Applications

Breadth-first search can be used to solve many problems in graph theory, for example: * Copying
garbage collection Waste collection is a part of the process of waste management. It is the transfer of solid waste from the point of use and disposal to the point of treatment or landfill. Waste collection also includes the curbside collection of recyclabl ...
,
Cheney's algorithm Cheney's algorithm, first described in a 1970 Association for Computing Machinery, ACM paper by C.J. Cheney, is a stop and copy method of tracing garbage collection in computer software systems. In this scheme, the Memory management#Dynamic memory ...
* Finding the
shortest path In graph theory, the shortest path problem is the problem of finding a path between two vertices (or nodes) in a graph such that the sum of the weights of its constituent edges is minimized. The problem of finding the shortest path between ...
between two nodes ''u'' and ''v'', with path length measured by number of edges (an advantage over depth-first search) * (Reverse) Cuthill–McKee mesh numbering * Ford–Fulkerson method for computing the
maximum flow In optimization theory, maximum flow problems involve finding a feasible flow through a flow network that obtains the maximum possible flow rate. The maximum flow problem can be seen as a special case of more complex network flow problems, such ...
in a
flow network In graph theory, a flow network (also known as a transportation network) is a directed graph where each edge has a capacity and each edge receives a flow. The amount of flow on an edge cannot exceed the capacity of the edge. Often in operations re ...
* Serialization/Deserialization of a binary tree vs serialization in sorted order, allows the tree to be re-constructed in an efficient manner. * Construction of the ''failure function'' of the Aho-Corasick pattern matcher. *Testing bipartiteness of a graph. *Implementing parallel algorithms for computing a graph's transitive closure.


See also

* Depth-first search *
Iterative deepening depth-first search In computer science, iterative deepening search or more specifically iterative deepening depth-first search (IDS or IDDFS) is a state space/graph search strategy in which a depth-limited version of depth-first search is run repeatedly with incr ...
*
Level structure In the mathematical subfield of graph theory a level structure of an undirected graph is a partition of the vertices into subsets that have the same distance from a given root vertex.. Definition and construction Given a connected graph ''G'' ...
*
Lexicographic breadth-first search In computer science, lexicographic breadth-first search or Lex-BFS is a linear time algorithm for ordering the vertices of a graph. The algorithm is different from a breadth-first search, but it produces an ordering that is consistent with breadt ...
* Parallel breadth-first search


References

*


External links

{{Commons category, Breadth-first search
Open Data Structures - Section 12.3.1 - Breadth-First Search
Pat Morin Patrick Ryan Morin is a Canadian computer scientist specializing in computational geometry and data structures. He is a professor in the School of Computer Science at Carleton University. Education and career Morin was educated at Carleton Univers ...
Graph algorithms Search algorithms